Our D-Bus services don't make sense outside a GNOME session, so
they shut down automatically when gnome-shell is not on the bus.
However this does not only apply when activating a service from
a non-GNOME session, but also when restarting gnome-shell on Xorg.
This is particularly problematic for services that shut down
automatically, as they lose all tracking state, even when
re-activated.
Address this by queuing a shutdown check instead of shutting down
immediately, so that the service can pick up the new shell name
provided it appears before the timeout (i.e. two seconds).
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7843
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3463>
(c, name, owner) => (this._shellName = owner),
() => {
this._shellName = null;
- this.emit('shutdown');
+
+ // For auto-shutdown services, delay shutting
+ // down in case the shell reappears
+ if (this._autoShutdown)
+ this._queueShutdownCheck();
+ else
+ this.emit('shutdown');
});
this._hasSignals = this._dbusImpl.get_info().signals.length > 0;
if (GLib.getenv('SHELL_DBUS_PERSIST'))
return;
- if (this._holdCount > 0)
+ if (this._shellName && this._holdCount > 0)
return;
this.emit('shutdown');